package com.itheima.reggie.controller;

import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.entity.Page;
import com.itheima.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/employee")
@Slf4j
public class EmployeeController {

    //一个类或者一个方法不存在的时候按下alt+enter键快速创建
    @Autowired
    private EmployeeService employeeService;

    /**
     * 作用：登录
     * @param employee  封装用户名与密码
     * @param sesission  会话域对象
     * @return
     */
    @PostMapping("/login")
    public R<Employee> login(@RequestBody  Employee employee, HttpSession sesission){
        //1.把参数传递给service
        R<Employee> result =  employeeService.login(employee);
        //2. 判断是登陆成功
        if(result.getCode()==1){
            //设置登录成功的标记
            sesission.setAttribute("employee",result.getData().getId());
        }
        return result;
    }


    /**
     * 作用：退出登录
     * @param sesission  会话域对象
     * @return
     *
     *  退出登录的两种方案：
     *          1.从session删除登录成功标记
     *          2.直接删除session
     */
    @PostMapping("/logout")
    public R<String> logout( HttpSession sesission){
        sesission.invalidate(); //清除session
        return R.success("退出成功");
    }

    /**
     * 新增用户方法
     * @param employee  用于封装json的数据
     * @param session   会话域
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody  Employee employee, HttpSession session){

        //1. 获取当前登陆的用户,补全员工的创建者与修改者
        Long empId = (Long) session.getAttribute("employee");
        employee.setCreateUser(empId);
        employee.setUpdateUser(empId);
        //2. 把数据交给service
        employeeService.save(employee);
        return R.success("保存成功");
    }


    /**
     * 作用： 员工列表分页
     * @param page  当前页
     * @param pageSize  页面大小
     * @param name  用户名
     * @return
     */
    @GetMapping("/page")
    public R<Page<Employee>> page(Integer page,Integer pageSize,String name){
        Page<Employee> pageResult=  employeeService.findByPage(page,pageSize,name);
        return R.success(pageResult);
    }


    /**
     * 作用： 更新员工信息
     * @param employee  封装所有提交过来的员工信息
     * @param session   会话域对象
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody  Employee employee,HttpSession session){
        //1. 获取当前登陆用户，修改更新者信息
        Long empId = (Long) session.getAttribute("employee");
        employee.setUpdateUser(empId);
        //2. 把信息交给service
        employeeService.update(employee);
        return R.success("修改成功");
    }

    /**
     * 作用：根据id查找员工的信息
     * @return
     */
    @GetMapping("/{id}")
    public R<Employee> findById(@PathVariable("id") Long id){
        Employee employee = employeeService.findById(id);
        return R.success(employee);
    }
}
